package com.wh.message.jpush.utils;

import cn.jpush.api.JPushClient;
import cn.jpush.api.push.model.Message;
import cn.jpush.api.push.model.Options;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.audience.AudienceTarget;
import cn.jpush.api.push.model.notification.AndroidNotification;
import cn.jpush.api.push.model.notification.IosAlert;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Map;


/**
 * 极光推送工具类
 * @author 谢泽鹏
 * @version V1.0
 * @Package com.wh.message.mq.service.impl
 * @date 2014年10月8日 下午4:02:14
 * @Copyright 个人版权所有
 * @Company 贵州万华科技有限公司Copyright (c) 2018
 */
public class JPushUtils {

	protected static final Logger LOG = LoggerFactory.getLogger(JPushUtils.class);  
	

   /**
    * 推送通知  
    * @param receiver_value
    * @param content 内容
    * @param extra 参数
    * @param title 标题
    * @param rowNum 未读消息条数
    * @return
    */
   private static PushPayload apnsNotifiton(String receiver_value, String content, Map<String, String> extra, String title, int rowNum, boolean open, String param_prefix){
       extra.put("title", title);//设置标题
	   IosAlert alert = IosAlert.newBuilder()
			   .setTitleAndBody(title, "", content)
			   .setActionLocKey("查看")
			   .build();
       return PushPayload.newBuilder()
                  .setPlatform(Platform.all()) 
                  .setAudience(Audience.alias(param_prefix+receiver_value))//向选定的人推送
                  .setNotification(Notification.newBuilder()
                          .addPlatformNotification(AndroidNotification.newBuilder()
                        		  	.setBuilderId(1)//设置Android 通知样式，需要客户端先定义、设置了该样式才有
                                    .setTitle(title)
                                    .setAlert(content)
								    //.setAlert(JSONObject.fromObject(extra))
                                    .addExtras(extra).build())//此字段为透传字段，不会显示在通知栏。用户可以通过此字段来做一些定制需求，如特定的key传要指定跳转的页面（value）
                          .addPlatformNotification(IosNotification.newBuilder()
//                                  .incrBadge(1)//此项是指定此推送的badge自动加1,如果想直接传具体值，可把incrBadge换成setBadge
                                  .setBadge(rowNum)
                                  .setSound("sound.caf")//此字段的值default表示系统默认声音；传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒，如果系统没有此音频则以系统默认声音提醒；此字段如果传空字符串，iOS9及以上的系统是无声音提醒，以下的系统是默认声音
                                  //.setAlert(content)
								  .setAlert(alert)
                                  .addExtras(extra).build())//此字段为透传字段，不会显示在通知栏。用户可以通过此字段来做一些定制需求，如特定的key传要指定跳转的页面（value）
                          .build())
                          .setMessage(Message.content(content))
                          .setOptions(Options.newBuilder()
                        		  .setApnsProduction(open)
                        		  .build())
                          .build();
                  
  }


	/**
	 * 发送消息到手机端
	 * @param msgReceiveuser
	 * @param msgContent
	 * @param nepmap
	 * @param msgTitle
	 * @param mASTER_SECTET
	 * @param aPP_KEY
	 * @param i
	 * @param open
	 * @param param_prefix
	 * @return
	 */
	public static boolean pushNotifiton(String msgReceiveuser, String msgContent,
			Map<String, String> nepmap, String msgTitle, String mASTER_SECTET,
			String aPP_KEY, int i,boolean open,String param_prefix) {
		 boolean flag=false;
	     @SuppressWarnings("deprecation")
	     JPushClient jpushClient = new JPushClient(mASTER_SECTET, aPP_KEY, 3);//最大通知失败次数
	     
	     PushPayload payload=apnsNotifiton(msgReceiveuser,msgContent,nepmap,msgTitle,i,open,param_prefix);

	      try {
	             jpushClient.sendPush(payload);
	             flag=true;
	         } catch (Exception e) {
	      	   LOG.error("通知推送失败，msg={}",e.getMessage());
	      	   e.printStackTrace();
	             flag=false;
	         }
	     return flag;
	}
   
   /**
    * 向客户端发送消息方法
    * @param receiver_type        发送类型
    * @param receiver_value       接收人
    * @param content            消息内容
    */
   private static PushPayload pushMsg(String receiver_type ,String receiver_value,String content,Map<String,Object> extra){
         return PushPayload.newBuilder()
                   .setPlatform(Platform.all())
                   .setAudience(Audience.newBuilder()
                           .addAudienceTarget(AudienceTarget.alias(receiver_value))
                           .build())
                   .setMessage(Message.newBuilder()
                           .setMsgContent(content)
                           .addExtra("noticeId", extra.get("noticeId").toString())
                           .addExtra("type", extra.get("type").toString())
                           .build())
                   .build();
   }

}  
